library(Seurat)
library(SeuratDisk)
library(reticulate)
library(scrubletR)
library(ggplot2)
library(patchwork)
library(dplyr)
library(data.table)
library(clustree)
library(reshape2)
library(tidyr)
library(gridExtra)
library(stringr)
library(plyr)
source("C:/Ryan/GitHub/trachtenberg-lab/transcriptomics/tools/seurat_functions.R")
source("C:/Ryan/GitHub/trachtenberg-lab/transcriptomics/tools/seurat_integration_functions.R")
source("C:/Ryan/GitHub/trachtenberg-lab/transcriptomics/xgboost/xgboost_train.R")
source("C:/Ryan/GitHub/trachtenberg-lab/transcriptomics/xgboost/plottingFxns.R")

# obj.opossum.glutamatergic <- readRDS("E:/Transcriptomics_V1/Opossum/seurat/opossum_v1_glutamatergic_processed.rds")
obj.opossum.glutamatergic$subclass <- obj.opossum.glutamatergic$SCT_snn_res.2
obj.opossum.glutamatergic$type <- obj.opossum.glutamatergic$SCT_snn_res.2
obj.mouse.glutamatergic.P38 <- readRDS("E:/Transcriptomics_V1/Mouse/seurat/mouse_v1_P38_glutamatergic_processed.rds")
obj.mouse.glutamatergic.P38$species <- "Mouse"

objs <- list(obj.opossum.glutamatergic, obj.mouse.glutamatergic.P38)

obj.integrated <- IntegrateObjects(objs[[1]], objs[[2]], resolutions = c(1), nfeatures = 6000, subsample = TRUE)

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~10s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=20s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Running CCA
Merging objects
Finding neighborhoods
Finding anchors
    Found 21290 anchors
Filtering anchors
    Retained 10950 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=12m 48s
sct.model: model1
Setting min_variance based on median UMI:  0.04
Calculating residuals of type pearson for 6809 genes

  |                                                                                                                                                                                                 
  |                                                                                                                                                                                           |   0%
  |                                                                                                                                                                                                 
  |=======                                                                                                                                                                                    |   4%
  |                                                                                                                                                                                                 
  |==============                                                                                                                                                                             |   7%
  |                                                                                                                                                                                                 
  |=====================                                                                                                                                                                      |  11%
  |                                                                                                                                                                                                 
  |============================                                                                                                                                                               |  15%
  |                                                                                                                                                                                                 
  |===================================                                                                                                                                                        |  19%
  |                                                                                                                                                                                                 
  |==========================================                                                                                                                                                 |  22%
  |                                                                                                                                                                                                 
  |================================================                                                                                                                                           |  26%
  |                                                                                                                                                                                                 
  |=======================================================                                                                                                                                    |  30%
  |                                                                                                                                                                                                 
  |==============================================================                                                                                                                             |  33%
  |                                                                                                                                                                                                 
  |=====================================================================                                                                                                                      |  37%
  |                                                                                                                                                                                                 
  |============================================================================                                                                                                               |  41%
  |                                                                                                                                                                                                 
  |===================================================================================                                                                                                        |  44%
  |                                                                                                                                                                                                 
  |==========================================================================================                                                                                                 |  48%
  |                                                                                                                                                                                                 
  |=================================================================================================                                                                                          |  52%
  |                                                                                                                                                                                                 
  |========================================================================================================                                                                                   |  56%
  |                                                                                                                                                                                                 
  |===============================================================================================================                                                                            |  59%
  |                                                                                                                                                                                                 
  |======================================================================================================================                                                                     |  63%
  |                                                                                                                                                                                                 
  |=============================================================================================================================                                                              |  67%
  |                                                                                                                                                                                                 
  |====================================================================================================================================                                                       |  70%
  |                                                                                                                                                                                                 
  |===========================================================================================================================================                                                |  74%
  |                                                                                                                                                                                                 
  |=================================================================================================================================================                                          |  78%
  |                                                                                                                                                                                                 
  |========================================================================================================================================================                                   |  81%
  |                                                                                                                                                                                                 
  |===============================================================================================================================================================                            |  85%
  |                                                                                                                                                                                                 
  |======================================================================================================================================================================                     |  89%
  |                                                                                                                                                                                                 
  |=============================================================================================================================================================================              |  93%
  |                                                                                                                                                                                                 
  |====================================================================================================================================================================================       |  96%
  |                                                                                                                                                                                                 
  |===========================================================================================================================================================================================| 100%
sct.model: model1
Setting min_variance based on median UMI:  0.04
Calculating residuals of type pearson for 6809 genes

  |                                                                                                                                                                                                 
  |                                                                                                                                                                                           |   0%
  |                                                                                                                                                                                                 
  |=======                                                                                                                                                                                    |   4%
  |                                                                                                                                                                                                 
  |==============                                                                                                                                                                             |   7%
  |                                                                                                                                                                                                 
  |=====================                                                                                                                                                                      |  11%
  |                                                                                                                                                                                                 
  |============================                                                                                                                                                               |  15%
  |                                                                                                                                                                                                 
  |===================================                                                                                                                                                        |  19%
  |                                                                                                                                                                                                 
  |==========================================                                                                                                                                                 |  22%
  |                                                                                                                                                                                                 
  |================================================                                                                                                                                           |  26%
  |                                                                                                                                                                                                 
  |=======================================================                                                                                                                                    |  30%
  |                                                                                                                                                                                                 
  |==============================================================                                                                                                                             |  33%
  |                                                                                                                                                                                                 
  |=====================================================================                                                                                                                      |  37%
  |                                                                                                                                                                                                 
  |============================================================================                                                                                                               |  41%
  |                                                                                                                                                                                                 
  |===================================================================================                                                                                                        |  44%
  |                                                                                                                                                                                                 
  |==========================================================================================                                                                                                 |  48%
  |                                                                                                                                                                                                 
  |=================================================================================================                                                                                          |  52%
  |                                                                                                                                                                                                 
  |========================================================================================================                                                                                   |  56%
  |                                                                                                                                                                                                 
  |===============================================================================================================                                                                            |  59%
  |                                                                                                                                                                                                 
  |======================================================================================================================                                                                     |  63%
  |                                                                                                                                                                                                 
  |=============================================================================================================================                                                              |  67%
  |                                                                                                                                                                                                 
  |====================================================================================================================================                                                       |  70%
  |                                                                                                                                                                                                 
  |===========================================================================================================================================                                                |  74%
  |                                                                                                                                                                                                 
  |=================================================================================================================================================                                          |  78%
  |                                                                                                                                                                                                 
  |========================================================================================================================================================                                   |  81%
  |                                                                                                                                                                                                 
  |===============================================================================================================================================================                            |  85%
  |                                                                                                                                                                                                 
  |======================================================================================================================================================================                     |  89%
  |                                                                                                                                                                                                 
  |=============================================================================================================================================================================              |  93%
  |                                                                                                                                                                                                 
  |====================================================================================================================================================================================       |  96%
  |                                                                                                                                                                                                 
  |===========================================================================================================================================================================================| 100%
Merging dataset 2 into 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Warning: sparse->dense coercion: allocating vector of size 1.7 GiBWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(condition$message, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(prefix, message) :
  NAs introduced by coercion to integer range
Warning: NAs introduced by coercion to integer rangeWarning in paste(new, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(new, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(new, collapse = "\n") :
  NAs introduced by coercion to integer range
Warning in paste(new, collapse = "\n") :
  NAs introduced by coercion to integer range

subclasses <- c(c("L2/3", "L4", "L5IT", "L5NP", "L5PT", "L6CT", "L6IT", "L6b"), as.character(1:27))
PlotIntegration(obj.integrated, "species", c("integrated_snn_res.1"), subclasses)


objs.i <- SplitObject(obj.integrated, split.by = "species")

objs.m <- MapObjects(objs.i[[1]], objs.i[[2]], c("subclass", "type"), assay = "integrated")


DimPlot(obj.mouse.glutamatergic.P38, group.by = "subclass", label = TRUE, raster = FALSE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

vfs <- VariableFeatures(obj.mouse.glutamatergic.P38[["SCT"]])
for (vf in 1:20) {
  p <- FeaturePlot(obj.mouse.glutamatergic.P38, features = vfs[vf], max.cutoff = 10, raster = FALSE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
  print(p)
}
Scale for x is already present.
Adding another scale for x, which will replace the existing scale.Scale for y is already present.
Adding another scale for y, which will replace the existing scale.


DimPlot(obj.opossum.glutamatergic, group.by = "SCT_snn_res.1", label = TRUE, raster = FALSE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

vfs <- VariableFeatures(obj.opossum.glutamatergic[["SCT"]])
for (vf in 21:40) {
  p <- FeaturePlot(obj.opossum.glutamatergic, features = vfs[vf], max.cutoff = 10, raster = FALSE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
  print(p)
}
Scale for x is already present.
Adding another scale for x, which will replace the existing scale.Scale for y is already present.
Adding another scale for y, which will replace the existing scale.


Idents(obj.opossum.glutamatergic) <- "SCT_snn_res.1"
obj.opossum.glutamatergic.IT <- subset(obj.opossum.glutamatergic, idents = c(2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 17, 19))
obj.opossum.glutamatergic.IT <- ClusterSCT(obj.opossum.glutamatergic.IT, resolutions = c(1))

PlotClusters(obj.opossum.glutamatergic.IT, group.id = "SCT_snn_res.1")
Scale for x is already present.
Adding another scale for x, which will replace the existing scale.Scale for y is already present.
Adding another scale for y, which will replace the existing scale.Scale for x is already present.
Adding another scale for x, which will replace the existing scale.Scale for y is already present.
Adding another scale for y, which will replace the existing scale.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KFNldXJhdCkNCmxpYnJhcnkoU2V1cmF0RGlzaykNCmxpYnJhcnkocmV0aWN1bGF0ZSkNCmxpYnJhcnkoc2NydWJsZXRSKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KbGlicmFyeShjbHVzdHJlZSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHBseXIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9pbnRlZ3JhdGlvbl9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3hnYm9vc3QveGdib29zdF90cmFpbi5SIikNCnNvdXJjZSgiQzovUnlhbi9HaXRIdWIvdHJhY2h0ZW5iZXJnLWxhYi90cmFuc2NyaXB0b21pY3MveGdib29zdC9wbG90dGluZ0Z4bnMuUiIpDQoNCiMgb2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYyA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvT3Bvc3N1bS9zZXVyYXQvb3Bvc3N1bV92MV9nbHV0YW1hdGVyZ2ljX3Byb2Nlc3NlZC5yZHMiKQ0Kb2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYyRzdWJjbGFzcyA8LSBvYmoub3Bvc3N1bS5nbHV0YW1hdGVyZ2ljJFNDVF9zbm5fcmVzLjINCm9iai5vcG9zc3VtLmdsdXRhbWF0ZXJnaWMkdHlwZSA8LSBvYmoub3Bvc3N1bS5nbHV0YW1hdGVyZ2ljJFNDVF9zbm5fcmVzLjINCm9iai5tb3VzZS5nbHV0YW1hdGVyZ2ljLlAzOCA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvTW91c2Uvc2V1cmF0L21vdXNlX3YxX1AzOF9nbHV0YW1hdGVyZ2ljX3Byb2Nlc3NlZC5yZHMiKQ0Kb2JqLm1vdXNlLmdsdXRhbWF0ZXJnaWMuUDM4JHNwZWNpZXMgPC0gIk1vdXNlIg0KDQpvYmpzIDwtIGxpc3Qob2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYywgb2JqLm1vdXNlLmdsdXRhbWF0ZXJnaWMuUDM4KQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kb2JqLmludGVncmF0ZWQgPC0gSW50ZWdyYXRlT2JqZWN0cyhvYmpzW1sxXV0sIG9ianNbWzJdXSwgcmVzb2x1dGlvbnMgPSBjKDEpLCBuZmVhdHVyZXMgPSA2MDAwLCBzdWJzYW1wbGUgPSBUUlVFKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kc3ViY2xhc3NlcyA8LSBjKGMoIkwyLzMiLCAiTDQiLCAiTDVJVCIsICJMNU5QIiwgIkw1UFQiLCAiTDZDVCIsICJMNklUIiwgIkw2YiIpLCBhcy5jaGFyYWN0ZXIoMToyNykpDQpQbG90SW50ZWdyYXRpb24ob2JqLmludGVncmF0ZWQsICJzcGVjaWVzIiwgYygiaW50ZWdyYXRlZF9zbm5fcmVzLjEiKSwgc3ViY2xhc3NlcykNCg0KYGBgDQoNCg0KYGBge3J9DQoNCm9ianMuaSA8LSBTcGxpdE9iamVjdChvYmouaW50ZWdyYXRlZCwgc3BsaXQuYnkgPSAic3BlY2llcyIpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpvYmpzLm0gPC0gTWFwT2JqZWN0cyhvYmpzLmlbWzFdXSwgb2Jqcy5pW1syXV0sIGMoInN1YmNsYXNzIiwgInR5cGUiKSwgYXNzYXkgPSAiaW50ZWdyYXRlZCIpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpQbG90TWFwcGluZyhvYmpzLm0sIGlkZW50Lm9yZGVyID0gc3ViY2xhc3NlcykNCg0KYGBgDQoNCg0KYGBge3J9DQoNCkRpbVBsb3Qob2JqLm1vdXNlLmdsdXRhbWF0ZXJnaWMuUDM4LCBncm91cC5ieSA9ICJzdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KdmZzIDwtIFZhcmlhYmxlRmVhdHVyZXMob2JqLm1vdXNlLmdsdXRhbWF0ZXJnaWMuUDM4W1siU0NUIl1dKQ0KZm9yICh2ZiBpbiAxOjIwKSB7DQogIHAgPC0gRmVhdHVyZVBsb3Qob2JqLm1vdXNlLmdsdXRhbWF0ZXJnaWMuUDM4LCBmZWF0dXJlcyA9IHZmc1t2Zl0sIG1heC5jdXRvZmYgPSAxMCwgcmFzdGVyID0gRkFMU0UpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQogIHByaW50KHApDQp9DQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpEaW1QbG90KG9iai5vcG9zc3VtLmdsdXRhbWF0ZXJnaWMsIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjEiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCnZmcyA8LSBWYXJpYWJsZUZlYXR1cmVzKG9iai5vcG9zc3VtLmdsdXRhbWF0ZXJnaWNbWyJTQ1QiXV0pDQpmb3IgKHZmIGluIDIxOjQwKSB7DQogIHAgPC0gRmVhdHVyZVBsb3Qob2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYywgZmVhdHVyZXMgPSB2ZnNbdmZdLCBtYXguY3V0b2ZmID0gMTAsIHJhc3RlciA9IEZBTFNFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KICBwcmludChwKQ0KfQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KSWRlbnRzKG9iai5vcG9zc3VtLmdsdXRhbWF0ZXJnaWMpIDwtICJTQ1Rfc25uX3Jlcy4xIg0Kb2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYy5JVCA8LSBzdWJzZXQob2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYywgaWRlbnRzID0gYygyLCAzLCA0LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNCwgMTUsIDE3LCAxOSkpDQpvYmoub3Bvc3N1bS5nbHV0YW1hdGVyZ2ljLklUIDwtIENsdXN0ZXJTQ1Qob2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYy5JVCwgcmVzb2x1dGlvbnMgPSBjKDEpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KUGxvdENsdXN0ZXJzKG9iai5vcG9zc3VtLmdsdXRhbWF0ZXJnaWMuSVQsIGdyb3VwLmlkID0gIlNDVF9zbm5fcmVzLjEiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KRmVhdHVyZVBsb3Qob2JqLm9wb3NzdW0uZ2x1dGFtYXRlcmdpYy5JVCwgZmVhdHVyZXMgPSBjKCJDdXgyIikpDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==